package de.hatraco.funderberg.blackjack.controller;

import java.awt.Color;
import java.util.Collections;
import javax.swing.Timer;

import de.hatraco.funderberg.blackjack.data.DataMISC;
import de.hatraco.funderberg.blackjack.data.GraphicsBlackJack;
//import de.hatraco.funderberg.blackjack.model.Deck;
import de.hatraco.funderberg.blackjack.model.Game;
import de.hatraco.funderberg.blackjack.utils.TimeBlackJack;
import de.hatraco.funderberg.blackjack.utils.TimerActionListener;
import de.hatraco.funderberg.blackjack.views.MainView;

public class Ctrl_MainView {
	
	//Singleton Pattern: Stellt sicher, dass nur eine Instanz von Ctrl_MainView existiert
	private static Ctrl_MainView instance = new Ctrl_MainView();
		
	public static Ctrl_MainView getInstance() {
		if (instance == null) {
			instance = new Ctrl_MainView();
		}	
		return instance;
	}
	
	private MainView mainview;
	private Game game;
	//private Deck deck;
	private GraphicsBlackJack img;
	private TimeBlackJack tbj;
	
	private int counterSetbust;
	private int counterMoveDealercard;
	private int counterMoveCard;
	private int counterMoveSplitcard;
	private int counterShipDealer;
	private int counterShipPlayer;
	private int counterByeBye;
	private int a_mc;
	private int b_mc;
	private int a_msc;
	private int b_msc;
	private int a_mdc;
	private int b_mdc;
	private int x_cb;
	private int y_cb;
	private int a_sd;
	private int a_sp;
	
	private Timer timerSetBust;
	private Timer timerMoveCard;
	private Timer timerMoveSplitcard;
	private Timer timerMoveDealercard;
	private Timer timerShipDealer;
	private Timer timerShipPlayer;
	private Timer timerClock;
	private Timer timerByeBye;
		
	String link = DataMISC.LINKIMG;

	public Ctrl_MainView() {
		
		//Instanziert Models, Views, Controller und Timer
		this.mainview = MainView.getInstanceWindow();
		this.game = Game.getInstance();
		//this.deck = Deck.getInstance();
		this.img = GraphicsBlackJack.getInstance();
		this.tbj = TimeBlackJack.getInstance();
		
		this.timerSetBust = new Timer(500, new TimerActionListener());
		this.timerMoveCard = new Timer(15, new TimerActionListener());
		this.timerMoveSplitcard = new Timer(15, new TimerActionListener());
		this.timerMoveDealercard = new Timer(15, new TimerActionListener());
		this.timerShipDealer = new Timer(8, new TimerActionListener());
		this.timerShipPlayer = new Timer(8, new TimerActionListener());
		this.timerClock = new Timer(1000, new TimerActionListener());
		this.timerByeBye = new Timer(5, new TimerActionListener());
	}
	
	//Methode für die Anzeige (und ggf. Position) des Namens eines Spielers
	public void setName(int player) {
		//Setzt den Namen an 2 Stellen in der View anhand des Namens des Models
		mainview.getPlayers().get(player).getName().setText(game.getPlayers().get(player).getName());
		mainview.getPlayers().get(player).getName2().setText(game.getPlayers().get(player).getName());
		//Falls nur 1 oder 2 Spieler mitspielen, dann müssen der Name und der Head nach unten geschoben werden (an die Position von P3 und P4)
		if (game.getPl_quant() < 3) {
			switch (player) {
			case 0:
				//Positioniert den Namen neu
				mainview.getPlayers().get(player).getName().setBounds(
						(int) Math.round(mainview.getWidth() * 0.1), 
						(int) Math.round(mainview.getHeight() * 0.42), 
						(int) Math.round(110 * img.getResizefactor()), 
						(int) Math.round(30 * img.getResizefactor())
				);
				//Positioniert den Head neu
				mainview.getPlayers().get(player).getHead().setBounds(
						((int) Math.round(mainview.getWidth() * 0.1) - (int) Math.round(12 * img.getResizefactor())), 
						((int) Math.round(mainview.getHeight() * 0.42) + (int) Math.round(30 * img.getResizefactor())), 
						(int) Math.round(131 * img.getResizefactor()), 
						(int) Math.round(141 * img.getResizefactor())
				);
				//Richtet die restlichen Elemente neu aus
				mainview.updateLoc();
				break;
			case 1:
				//Positioniert den Namen neu
				mainview.getPlayers().get(player).getName().setBounds(
						(int) Math.round(mainview.getWidth() * 0.785), 
						(int) Math.round(mainview.getHeight() * 0.42), 
						(int) Math.round(110 * img.getResizefactor()), 
						(int) Math.round(30 * img.getResizefactor())
				);
				//Positioniert den Head neu
				mainview.getPlayers().get(player).getHead().setBounds(
						((int) Math.round(mainview.getWidth() * 0.785) - (int) Math.round(12 * img.getResizefactor())), 
						((int) Math.round(mainview.getHeight() * 0.42) + (int) Math.round(30 * img.getResizefactor())), 
						(int) Math.round(131 * img.getResizefactor()), 
						(int) Math.round(141 * img.getResizefactor())
				);
				//Richtet die restlichen Elemente neu aus
				mainview.updateLoc();
				break;
			default:
			}
		}
		//Hat der Name mehr als 6 Zeichen, dann wird das Namensfeld vergrößert und nach links gesetzt
		int l = game.getPlayers().get(player).getName().length();
		if (l > 6) {
			mainview.getPlayers().get(player).getName().setBounds(
					(int) Math.round(mainview.getPlayers().get(player).getName().getX() - ((10*l) / 2) * img.getResizefactor()), 
					mainview.getPlayers().get(player).getName().getY(), 
					(int) Math.round((110 + (9*l)) * img.getResizefactor()), 
					(int) Math.round(30 * img.getResizefactor())
			);
		}
		//Aktivieren der Namen und des Heads in der View
		mainview.getPlayers().get(player).getName().setVisible(true);
		mainview.getPlayers().get(player).getHead().setVisible(true);
		mainview.getPlayers().get(player).getName2().setVisible(true);
	}
	
	//Setzt und aktiviert die Bet in der View
	public void setBet() {
		mainview.getPlayers().get(game.getPl_on()).getBet().setText(String.valueOf(game.getPlayers().get(game.getPl_on()).getBet()));
		mainview.getPlayers().get(game.getPl_on()).getBet().setVisible(true);
	}
	
	//Setzt und aktiviert die SplitBet in der View
	public void setSplitBet() {
		mainview.getPlayers().get(game.getPl_on()).getBet().setText(String.valueOf(game.getPlayers().get(game.getPl_on()).getBet()) + " / " + String.valueOf(game.getPlayers().get(game.getPl_on()).getSplitbet()));
		mainview.getPlayers().get(game.getPl_on()).getBet().setVisible(true);
	}
	
	//Setzt und aktiviert den Stack in der View
	public void setStack(int player) {
		mainview.getPlayers().get(player).getStackint().setText(String.valueOf(game.getPlayers().get(player).getStack()));
		mainview.getPlayers().get(player).getStackint().setVisible(true);
	}
	
	//Aktiviert einen Spieler optisch in der View
	public void setPlayer() {
		//Setzt den zum aktiven Spieler passenden Background
		mainview.getBackgr().setIcon(img.getMainbgs().get(game.getPl_on()));
		//Hinterlegt den Namen und das Value
		mainview.getPlayers().get(game.getPl_on()).getName().setBackground(DataMISC.GREEN_PLON);
		mainview.getPlayers().get(game.getPl_on()).getValue().setOpaque(true);
		mainview.getPlayers().get(game.getPl_on()).getValue().setForeground(Color.BLACK);
		//Falls der aktive Spieler nicht der erste Spieler ist ...
		if (game.getPl_on() > 0) {
			//... wird die Hinterlegung des Namens und der Value des vorherigen Spielers deaktiviert
			mainview.getPlayers().get((game.getPl_on() - 1)).getName().setBackground(DataMISC.BROWN_FONTS);
			mainview.getPlayers().get((game.getPl_on() - 1)).getValue().setOpaque(false);
			mainview.getPlayers().get((game.getPl_on() - 1)).getValue().setForeground(Color.WHITE);
			//Sofern der vorherige Spieler eine Splithand hatte, wird auch hier die Hinterlegung deaktiviert
			if (game.getPlayers().get((game.getPl_on() - 1)).getSplithand().getCards().size() > 0) {
				mainview.getPlayers().get(game.getPl_on() - 1).getSplitvalue().setOpaque(false);
				mainview.getPlayers().get(game.getPl_on() - 1).getSplitvalue().setForeground(Color.WHITE);
			}
		}
	}
	
	//Resetet die Player (keine Hervorhebung eines aktiven Spielers)
	public void resetPlayers() {
		mainview.getBackgr().setIcon(img.getBgdef());
		for (int i = 0; i < game.getPl_quant(); i++) {
			mainview.getPlayers().get(i).getName().setBackground(DataMISC.BROWN_FONTS);
			mainview.getPlayers().get(i).getValue().setOpaque(false);
			mainview.getPlayers().get(i).getValue().setForeground(Color.WHITE);
			mainview.getPlayers().get(i).getSplitvalue().setOpaque(false);
			mainview.getPlayers().get(i).getSplitvalue().setForeground(Color.WHITE);
		}
	}
	
	//Aktiviert die Splithand eines Spielers optisch in der View
	public void setSplitPlayer() {
		mainview.getPlayers().get(game.getPl_on()).getValue().setOpaque(false);
		mainview.getPlayers().get(game.getPl_on()).getValue().setForeground(Color.WHITE);
		mainview.getPlayers().get(game.getPl_on()).getSplitvalue().setOpaque(true);
		mainview.getPlayers().get(game.getPl_on()).getSplitvalue().setForeground(Color.BLACK);
	}
	
	//Methode zum Anzeigen einer Spielkarte in der View
	public void showCard(int card) {
		//Legt x und y in Abhängigkeit der Position des Heads fest
		int x = mainview.getPlayers().get(game.getPl_on()).getHead().getX();
		int y = (mainview.getPlayers().get(game.getPl_on()).getHead().getY() + mainview.getPlayers().get(game.getPl_on()).getHead().getHeight());
		//Setzt die Position der Karte in Abhängigkeit der Position des Spielers und der Anzahl der Karte, die bereits auf der hand sind
		mainview.getCardsimg().get(card).setBounds(
				(x - (int) Math.round(74 * img.getResizefactor())) + (((int) Math.round(20 * img.getResizefactor())) * (game.getPlayers().get(game.getPl_on()).getHand().getCards().size()-1)),
				(y + (int) Math.round(5 * img.getResizefactor())), 
				(int) Math.round(72 * img.getResizefactor()), 
				(int) Math.round(96 * img.getResizefactor())
		);
		//Setzt das Bild der Karte in der Hirarchie ganz nach oben und aktiviert das Bild
		mainview.getContent().moveToFront(mainview.getCardsimg().get(card));
		mainview.getCardsimg().get(card).setVisible(true);
		//Erhöht den Cardcount
		game.setCardcount((game.getCardcount() + 1));
		//Sofern das Spiel noch in der Deal-Phase ist, wird pl_on erhöht (falls es noch weitere Spieler gibt)
		if (game.getPlayers().get(game.getPl_on()).getHand().getCards().size() < 3 && game.getPlayers().get(game.getPl_on()).getSplithand().getCards().size() == 0) {
			if (game.getPl_on() < game.getPl_quant()-1) {
				game.setPl_on(game.getPl_on()+1);
			}
		}
		//Nach jedem Austeilen einer Karte wird die Hand auf Bust geprüft
		Main_Controller.getInstance().checkBust();
	}
	
	//Methode für die Bewegung des Kartenrückens für die Mainhand
	public void moveCard() {
		//Resetet den Counter für den Timer
		counterMoveCard = 0;
		//Holt X und Y der aktuellen Position des Kartenrückens
		x_cb = mainview.getCard_b().getX();
		y_cb = mainview.getCard_b().getY();
		//Setzt Variablen für die gewünschte Endposition
		a_mc = ((mainview.getPlayers().get(game.getPl_on()).getHead().getX() - (int) Math.round(74 * img.getResizefactor())) + 
				(((int) Math.round(20 * img.getResizefactor())) * (game.getPlayers().get(game.getPl_on()).getHand().getCards().size()-1))); 
		b_mc = ((mainview.getPlayers().get(game.getPl_on()).getHead().getY() + 
				mainview.getPlayers().get(game.getPl_on()).getHead().getHeight()) + (int) Math.round(5 * img.getResizefactor()));
		//Startet den Timer für die Bewegung
		timerMoveCard.start();
	}
	
	//Methode für die Positionierung der ersten Karte einer Splithand (Übernahme der Karte aus der Mainhand) 
	public void setSplitCard() {
		//Setzt Positionsvariablen in Abhängigkeit vom Head
		int x = mainview.getPlayers().get(game.getPl_on()).getHead().getX();
		int y = (mainview.getPlayers().get(game.getPl_on()).getHead().getY() + mainview.getPlayers().get(game.getPl_on()).getHead().getHeight());
		//Setzt die Position der Karte
		mainview.getCardsimg().get(game.getPlayers().get(game.getPl_on()).getSplithand().getCards().get(0).getImg()).setBounds(
				(x + (int) Math.round(74 * img.getResizefactor())) + (((int) Math.round(20 * img.getResizefactor())) * (game.getPlayers().get(game.getPl_on()).getSplithand().getCards().size()-1)),
				(y + (int) Math.round(5 * img.getResizefactor())), 
				(int) Math.round(72 * img.getResizefactor()), 
				(int) Math.round(96 * img.getResizefactor())
		);
		//Setzt das Bild der Karte in der Hirarchie ganz nach oben
		mainview.getContent().moveToFront(mainview.getCardsimg().get(game.getPlayers().get(game.getPl_on()).getSplithand().getCards().get(0).getImg()));
		//Berechnet und setzt die Values der Hand und der Splithand neu
		setValue();
		setSplitValue();
	}
	
	//Methode zur Anzeige einer Karte der Splithand
	public void showSplitcard(int card) {
		//Setzt Positionsvariablen in Abhängigkeit vom Head
		int x = mainview.getPlayers().get(game.getPl_on()).getHead().getX();
		int y = (mainview.getPlayers().get(game.getPl_on()).getHead().getY() + mainview.getPlayers().get(game.getPl_on()).getHead().getHeight());
		//Setzt die Position der Karte
		mainview.getCardsimg().get(card).setBounds(
				(x + (int) Math.round(74 * img.getResizefactor())) + (((int) Math.round(20 * img.getResizefactor())) * (game.getPlayers().get(game.getPl_on()).getSplithand().getCards().size()-1)),
				(y + (int) Math.round(5 * img.getResizefactor())), 
				(int) Math.round(72 * img.getResizefactor()), 
				(int) Math.round(96 * img.getResizefactor())
		);
		//Setzt das Bild der Karte in der Hirarchie ganz nach oben und aktiviert das Bild
		mainview.getContent().moveToFront(mainview.getCardsimg().get(card));
		mainview.getCardsimg().get(card).setVisible(true);
		//Erhöht den Cardcount 
		game.setCardcount((game.getCardcount() + 1));
		//Nach jedem Austeilen einer Karte wird die Hand auf Bust geprüft
		Main_Controller.getInstance().checkBust();
	}
	
	//Methode für die Bewegung des Kartenrückens für die Splihand
	public void moveSplitCard() {
		//Resetet den Counter für den Timer
		counterMoveSplitcard = 0;
		//Holt X und Y der aktuellen Position des Kartenrückens
		x_cb = mainview.getCard_b().getX();
		y_cb = mainview.getCard_b().getY();
		//Setzt Variablen für die gewünschte Endposition
		a_msc = ((mainview.getPlayers().get(game.getPl_on()).getHead().getX() + (int) Math.round(74 * img.getResizefactor())) + 
				(((int) Math.round(20 * img.getResizefactor())) * (game.getPlayers().get(game.getPl_on()).getSplithand().getCards().size()-1))); 
		b_msc = ((mainview.getPlayers().get(game.getPl_on()).getHead().getY() + 
				mainview.getPlayers().get(game.getPl_on()).getHead().getHeight()) + (int) Math.round(5 * img.getResizefactor()));
		//Startet den Timer für die Bewegung
		timerMoveSplitcard.start();
	}
	
	//Methode zur Anzeige einer Karte des Dealers
	public void showDealerCard(int card) {
		//Setzt die Position der Karte in Abhängigkeit der Position des Dealernamens
		mainview.getCardsimg().get(card).setBounds(
				(mainview.getDealername().getX() - (int) Math.round(90 * img.getResizefactor()) + (((int) Math.round(20 * img.getResizefactor())) * (game.getDealer().getHand().getCards().size()-1))), 
				(mainview.getDealername().getY() + (int) Math.round(175 * img.getResizefactor())), 
				(int) Math.round(72 * img.getResizefactor()), 
				(int) Math.round(96 * img.getResizefactor())
		);
		//Setzt das Bild der Karte in der Hirarchie ganz nach oben und aktiviert das Bild
		mainview.getContent().moveToFront(mainview.getCardsimg().get(card));
		mainview.getCardsimg().get(card).setVisible(true);
		//Erhöht den Cardcount
		game.setCardcount((game.getCardcount() + 1));
		//Nach jedem Austeilen einer Karte wird die Hand auf Bust geprüft
		Main_Controller.getInstance().checkDealerBust();
	}
	
	//Methode für die Bewegung des Kartenrückens für Hand des Dealers
	public void moveDealerCard() {
		//Resetet den Counter für den Timer
		counterMoveDealercard = 0;
		//Holt X und Y der aktuellen Position des Kartenrückens
		x_cb = mainview.getCard_b().getX();
		y_cb = mainview.getCard_b().getY();
		//Setzt Variablen für die gewünschte Endposition
		a_mdc = (mainview.getDealername().getX() - (int) Math.round(90 * img.getResizefactor()) + 
				(((int) Math.round(20 * img.getResizefactor())) * (game.getDealer().getHand().getCards().size()-1)));
		b_mdc = (mainview.getDealername().getY() + (int) Math.round(175 * img.getResizefactor()));
		//Startet den Timer für die Bewegung
		timerMoveDealercard.start();
	}
	
	//Methode für die Bewegung des "Dealer is up"-Schiffs
	public void moveDealerShip() {
		//Mischt die Liste mit den Schiffen, damit ein zufälliges Bild gewählt wird
		Collections.shuffle(mainview.getShips_dealer());
		//Resetet den Counter für den Timer
		counterShipDealer = 0;
		//Setzt Variable für die Startposition
		a_sd = (int) Math.round(-500 * img.getResizefactor());
		//Setzt das Bild der Karte in der Hirarchie ganz nach oben und aktiviert das Bild
		mainview.getContent().moveToFront(mainview.getShips_dealer().get(0));
		mainview.getShips_dealer().get(0).setVisible(true);
		//Startet den Timer für die Bewegung
		timerShipDealer.start();
	}
	//Methode für die Bewegung des "Player X is up"-Schiffs
	public void movePlayerShip() {
		//Mischt die Liste mit den Schiffen, damit ein zufälliges Bild gewählt wird
		Collections.shuffle(mainview.getShips_players().get(game.getPl_on()));
		//Resetet den Counter für den Timer
		counterShipPlayer = 0;
		//Setzt Variable für die Startposition
		a_sp = (int) Math.round(-500 * img.getResizefactor());
		//Setzt das Bild der Karte in der Hirarchie ganz nach oben und aktiviert das Bild
		mainview.getShips_players().get(game.getPl_on()).get(0).setVisible(true);
		mainview.getContent().moveToFront(mainview.getShips_players().get(game.getPl_on()).get(0));
		//Startet den Timer für die Bewegung
		timerShipPlayer.start();
	}
	
	//Setzen und Anzeigen der Value der Mainhand
	public void setValue() {
		mainview.getPlayers().get(game.getPl_on()).getValue().setText(String.valueOf(game.getPlayers().get(game.getPl_on()).getHand().getValue()));
		mainview.getPlayers().get(game.getPl_on()).getValue().setVisible(true);
	}
	
	//Setzen und Anzeigen der Value der Splithand
	public void setSplitValue() {
		mainview.getPlayers().get(game.getPl_on()).getSplitvalue().setText(String.valueOf(game.getPlayers().get(game.getPl_on()).getSplithand().getValue()));
		mainview.getPlayers().get(game.getPl_on()).getSplitvalue().setVisible(true);
	}
	
	//Setzen und Anzeigen der Value der Dealerhand
	public void setDealerValue() {
		mainview.getDealervalue().setText(String.valueOf(game.getDealer().getHand().getValue()));
		mainview.getDealervalue().setVisible(true);
	}
	
	//Anzeige des "Bust"-Labels der Player per Timer
	public void setBust() {
		counterSetbust = 0;
		timerSetBust.setInitialDelay(0);
		timerSetBust.start();
	}
	
	//Anzeige des "Bust"-Labels des Dealers
	public void setDealerBust() {
		//Setzt "BUST!" als Value
		mainview.getDealervalue().setText("BUST!");
		//Prüft für alle Spieler (Main- + Splithand), ob im Fall von Dealer-Bust der Spieler gewinnt und dann das "YouWin"-Label aktiviert werden muss
		for (int i = 0; i < game.getPl_quant(); i++) {
			if (game.getPlayers().get(i).getHand().getResult() > 0 && game.getPlayers().get(i).getHand().getResult() < 22) {
				mainview.getContent().moveToFront(mainview.getPlayers().get(i).getYouwin());
				mainview.getPlayers().get(i).getYouwin().setVisible(true);
			}
			if (game.getPlayers().get(i).getSplithand().getResult() >1 && game.getPlayers().get(i).getSplithand().getResult() < 22) {
				mainview.getContent().moveToFront(mainview.getPlayers().get(i).getSplit_youwin());
				mainview.getPlayers().get(i).getSplit_youwin().setVisible(true);
			}
		}
	}
	
	//Methode zum Reseten des Tisches vor einer neuen Runde
	public void resetTable() {
		//Deaktiviert alle Karten aller Hände der Spieler
		for (int i = 0; i < game.getPl_quant(); i++) {
			for (int j = 0; j < game.getPlayers().get(i).getHand().getCards().size(); j++) {
				mainview.getCardsimg().get(game.getPlayers().get(i).getHand().getCards().get(j).getImg()).setVisible(false);
			}
			for (int j = 0; j < game.getPlayers().get(i).getSplithand().getCards().size(); j++) {
				mainview.getCardsimg().get(game.getPlayers().get(i).getSplithand().getCards().get(j).getImg()).setVisible(false);
			}
		}
		//Deaktiviert alle Karten des Dealers
		for (int i = 0; i < game.getDealer().getHand().getCards().size(); i++) {
			mainview.getCardsimg().get(game.getDealer().getHand().getCards().get(i).getImg()).setVisible(false);
		}
		//Resetet/Deaktiviert die Elemente aller Spieler
		for (int i = 0; i < game.getPl_quant(); i++) {
			mainview.getPlayers().get(i).getBet().setText("0");
			mainview.getPlayers().get(i).getValue().setVisible(false);
			mainview.getPlayers().get(i).getSplitvalue().setVisible(false);
			mainview.getPlayers().get(i).getYouwin().setVisible(false);
			mainview.getPlayers().get(i).getDealerwins().setVisible(false);
			mainview.getPlayers().get(i).getDraw().setVisible(false);
			mainview.getPlayers().get(i).getSplit_youwin().setVisible(false);
			mainview.getPlayers().get(i).getSplit_dealerwins().setVisible(false);
			mainview.getPlayers().get(i).getSplit_draw().setVisible(false);
			mainview.getPlayers().get(i).getName().setBackground(DataMISC.BROWN_FONTS);
		}
		//Deaktiviert das Value des Dealers
		mainview.getDealervalue().setVisible(false);
	}
	
	//Methode zum Start der Anzeige der Uhr
	public void theClock() {
		timerClock.setInitialDelay(0);
		timerClock.start();
	}
	
	//Methode zur Aktualisierung der Uhrzeit
	public void updateClock() {
		mainview.getTime().setText(tbj.getTime());
	}
	
	//Methode zum Aufruf der ByeBye-Animation per Timer
	public void byeBye() {
		//Setzt den ByeBye-Background
		mainview.getBackgr().setIcon(img.getByebye());
		//Setzt das Bild in der Hirarchie ganz nach oben
		mainview.getContent().moveToFront(mainview.getBackgr());
		//Resetet den Counter
		counterByeBye = 0;
		//Legt eine Startverzögerung fest
		timerByeBye.setInitialDelay(5000);
		//Startet den Timer
		timerByeBye.start();
	}
	
	public Timer getTimerSetBust() {
		return timerSetBust;
	}

	public void setTimerSetBust(Timer timerSetBust) {
		this.timerSetBust = timerSetBust;
	}

	public Timer getTimerMoveCard() {
		return timerMoveCard;
	}

	public void setTimerMoveCard(Timer timerMoveCard) {
		this.timerMoveCard = timerMoveCard;
	}

	public Timer getTimerMoveSplitcard() {
		return timerMoveSplitcard;
	}

	public void setTimerMoveSplitcard(Timer timerMoveSplitcard) {
		this.timerMoveSplitcard = timerMoveSplitcard;
	}

	public Timer getTimerMoveDealercard() {
		return timerMoveDealercard;
	}

	public void setTimerMoveDealercard(Timer timerMoveDealercard) {
		this.timerMoveDealercard = timerMoveDealercard;
	}	

	public Timer getTimerShipDealer() {
		return timerShipDealer;
	}

	public void setTimerShipDealer(Timer timerShipDealer) {
		this.timerShipDealer = timerShipDealer;
	}

	public Timer getTimerShipPlayer() {
		return timerShipPlayer;
	}

	public void setTimerShipPlayer(Timer timerShipPlayer) {
		this.timerShipPlayer = timerShipPlayer;
	}

	public Timer getTimerClock() {
		return timerClock;
	}

	public void setTimerClock(Timer timerClock) {
		this.timerClock = timerClock;
	}

	public Timer getTimerByeBye() {
		return timerByeBye;
	}

	public void setTimerByeBye(Timer timerByeBye) {
		this.timerByeBye = timerByeBye;
	}

	public int getCounterSetBust() {
		return counterSetbust;
	}

	public void setCounterSetBust(int counterSetBust) {
		this.counterSetbust = counterSetBust;
	}

	public int getCounterMoveCard() {
		return counterMoveCard;
	}

	public void setCounterMoveCard(int counterMoveCard) {
		this.counterMoveCard = counterMoveCard;
	}
	
	public int getCounterMoveSplitcard() {
		return counterMoveSplitcard;
	}

	public void setCounterMoveSplitcard(int counterMoveSplitcard) {
		this.counterMoveSplitcard = counterMoveSplitcard;
	}

	public int getCounterMoveDealercard() {
		return counterMoveDealercard;
	}

	public void setCounterMoveDealercard(int counterMoveDealercard) {
		this.counterMoveDealercard = counterMoveDealercard;
	}
	
	public int getCounterShipDealer() {
		return counterShipDealer;
	}
	
	public void setCounterShipDealer(int counterShipDealer) {
		this.counterShipDealer = counterShipDealer;
	}

	public int getCounterShipPlayer() {
		return counterShipPlayer;
	}

	public void setCounterShipPlayer(int counterShipPlayer) {
		this.counterShipPlayer = counterShipPlayer;
	}

	public int getCounterByeBye() {
		return counterByeBye;
	}

	public void setCounterByeBye(int counterByeBye) {
		this.counterByeBye = counterByeBye;
	}

	public int getA_mc() {
		return a_mc;
	}

	public void setA_mc(int a_mc) {
		this.a_mc = a_mc;
	}

	public int getB_mc() {
		return b_mc;
	}

	public void setB_mc(int b_mc) {
		this.b_mc = b_mc;
	}
	
	public int getA_msc() {
		return a_msc;
	}

	public void setA_msc(int a_msc) {
		this.a_msc = a_msc;
	}

	public int getB_msc() {
		return b_msc;
	}

	public void setB_msc(int b_msc) {
		this.b_msc = b_msc;
	}

	public int getA_mdc() {
		return a_mdc;
	}

	public void setA_mdc(int a_mdc) {
		this.a_mdc = a_mdc;
	}

	public int getB_mdc() {
		return b_mdc;
	}

	public void setB_mdc(int b_mdc) {
		this.b_mdc = b_mdc;
	}

	public int getX_cb() {
		return x_cb;
	}

	public void setX_cb(int x_cb) {
		this.x_cb = x_cb;
	}

	public int getY_cb() {
		return y_cb;
	}

	public void setY_cb(int y_cb) {
		this.y_cb = y_cb;
	}

	public int getA_sd() {
		return a_sd;
	}

	public void setA_sd(int a_sd) {
		this.a_sd = a_sd;
	}

	public int getA_sp() {
		return a_sp;
	}

	public void setA_sp(int a_sp) {
		this.a_sp = a_sp;
	}
}
